/**
 * 文本模型：做的事件：存储当前整个编辑的内容，同时提供一些api可以对当前的内容执行操作（添加，修改）
 * 
 * 
 * 
 */

import EventEmitter from "events";
export class TextModel extends EventEmitter {
    /**
     *  _：私有变量，不希望被外界访问
     * spacers_；插入的字符
     */
    spacers_ = '';
    constructor() {
        super()
    }
    /**
     * 数据模型发生了变化。通知其他人做出相应的改变。
     */
    textChangeEmit_ () {
        this.emit('text-change');
    }
    getSpacers () {
        return this.spacers_
    }

    /**
     * 插入字符
     * @param {*} spacerIndex ：插入的位置
     * @param {*} spacers ：插入的字符串
     */
    insert (spacerIndex, spacers) {
        const oldSpacers = this.spacers_
        this.spacers_ = oldSpacers.slice(0, spacerIndex) + spacers + oldSpacers.slice(spacerIndex)
        this.textChangeEmit_()
    }
    /**
     * 删除字符
     * @param {*} startIndex 删除字符的开始位置
     * @param {*} endIndex 删除字符的结束位置
     */
    remove (startIndex, endIndex) {
        const oldSpacers = this.spacers_
        // 删除的时候需要判断，开始位置的索引小于结束位置的索引
        if (startIndex > endIndex) {
            [startIndex, endIndex] = [endIndex, startIndex]
        }
        this.spacers_ = oldSpacers.slice(0, startIndex) + oldSpacers.slice(endIndex)
        this.textChangeEmit_()
    }
}
export default TextModel;